<?php
// CAPTCHA 全自动区分人与计算机的图灵测试
// 作用：降低短时间内对服务器的访问频率

// 人与计算机的区别： 
// 计算机(浏览器)可以获取标签的内容 但是不可以获取图片中的文字
// 而人可以获得图片中的文字


paint_code(100,30,4);
function paint_code($width,$height,$len){
    $img = imagecreatetruecolor($width, $height);
    // 背景颜色变化更高级便是 从一张杂乱的图片中截取一部分作为背景图片
    $bg = imagecolorallocate($img, mt_rand(210,255), mt_rand(210,255), mt_rand(210,255));
    imagefill($img, 0, 0, $bg);

    // 一个字母一个字母的画上去  这样字体的偏角可以不一样颜色也不一样
    $code = identifying_code($len);
    // 此处生成的验证码 存入session中 方便校验
    session_start();
    $_SESSION['code'] = $code;
    for ($i=0,$length = strlen($code); $i < $length; $i++) { 
    	// 验证码画在图片上 字母的颜色区间一定要和背景图片区分开来
    	$font_color = imagecolorallocate($img, mt_rand(50,150), mt_rand(50,150), mt_rand(50,150));
    	// width 100 height 30
    	// y 2/3*height
    	// x +width/len
    	imagettftext($img, mt_rand(18,20), mt_rand(-9,9), $i*$width/$len, 2/3*$height, $font_color,'msyh.ttc', $code[$i]);
    }

    // 增加干扰线
    for ($i=0,$length = strlen($code); $i < $length; $i++) { 
    	$interfere_color = imagecolorallocate($img, mt_rand(50,150), mt_rand(50,150), mt_rand(50,150));
        imageline($img, mt_rand(0,100), mt_rand(0,30), mt_rand(0,100), mt_rand(0,30), $interfere_color);
    }

    // 输出图片
    header('content-type:image/jpeg');
    imagejpeg($img);
 
}
   // 1.制作验证码
function identifying_code($len){
    // 1.1 生成随机字符串 a-z A-Z 0-9
    $charset = 'abcdefghijkmnopqrstuvwsyzABCDEFGHIJKLMNPQRSTUVWSIJ0123456789';
    $code = '';
    for ($i=0; $i <$len; $i++) { 
    	$code .= $charset[mt_rand(0,59)];
    }
    return $code;
}
?>